<?php

namespace Drinkiit\BlogBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Drinkiit\BlogBundle\Form\AdminOperationsDrinkiitType;
use Drinkiit\BlogBundle\Handler\AdminOperationsUserHandler;
use Drinkiit\BlogBundle\Entity\Operations;
use Drinkiit\UtilisateurBundle\Entity\UtilisateurApp;

class AdminDrinkiitController extends Controller
{
	public function em($objet) {
		return $this->getDoctrine()->getEntityManager()->getRepository($objet) ;
	}
	
	public function indexAction()
	{
		$now = new \DateTime("now") ;
		$user = $this->em('Drinkiit\UtilisateurBundle\Entity\UtilisateurApp')->findOneBy(array('username' => 'Drinkiit')) ; // on récupère le compte drinkiit
		
		$operation = new Operations();
		$operation->setDate($now) ;
		$operation->setOperationUtilisateur($user) ;
		
		$form = $this->createForm(new AdminOperationsDrinkiitType, $operation);
		
		$formHandler = new AdminOperationsUserHandler($form, $this->get('request'), $this, $this->getDoctrine()->getEntityManager());
        
		if( $formHandler->process() )
        {
			$this->get('logger')->info("[INFO] Formulaire bien validé, d'ou la redirection [admin_management_operations_drinkiit]") ;
            return $this->redirect( $this->generateUrl('admin_management_operations_drinkiit') );
        }
        
		// calcul des infos sur le compte de drinkiit
		$solde = 0 ;
		$out_today = 0 ;
		$solde_client = 0 ;
		$liste_operation = $this->em('DrinkiitBlogBundle:Operations')->findAll() ; // on récupère la liste des opérations
		foreach($liste_operation as $operation) { // pour chacune d'entre elle
			$solde += $operation->getOperation() ; // elle est comptée positive
			
			if ( $operation->getOperationUtilisateur()->getId() == $user->getId() ) { // si l'opé a été faite par le club
				
				if ( date_diff($operation->getDate(), $now)->format('%d') == 0 ) // si elle date d'aujourd'hui
				{
					$out_today += $operation->getOperation() ; // on l'ajoute au dépenses d'aujourd'hui
				}
			} else { // sinon
				$solde_client += $operation->getOperation() ;
			}
		}
		$this->get('logger')->info("[INFO] Sur ".count($liste_operation)." opérations, on a $solde € en cash et les l'ensemble des clients $solde_client €. Le club a aussi dépensé $out_today €.") ;
		
		$solde_commande = 0 ;
		$in_today = 0 ;
		$liste_commandes = $this->em('DrinkiitBlogBundle:Commande')->findBy(array('validee' => true, 'est_menu' => false)) ; // on récupère la liste des commandes passées
		foreach($liste_commandes as $commande) {
			$solde_commande += $commande->getPrix() ;
			
			if ( date_diff($commande->getDateCommande(), $now)->format('%d') == 0 )
			{
				$in_today += $commande->getPrix() ;
			}
		}
		$dette_clients = $solde_commande - $solde_client ; // ce que les clients doivent encore c'est le tot de leur commande - l'argent que l'on a déjà récupéré par les opérations
		$this->get('logger')->info("[INFO] Sur ".count($liste_commandes)." commandes, on a $solde_commande € de dettes clients mais déjà $solde_client € de payé. Et aujourd'hui ils ont $in_today € de dépenses.") ;
		
		
		
		//$this->get('logger')->info("[INFO] Nombre d'articles : ".count($liste_article)) ;
		return $this->render('DrinkiitBlogBundle:Admin:Drinkiit.html.twig', array(
			'form' => $form->createView(),
			'titre' => 'Ajouter un article',
			'solde' => $solde,
			'in_today' => $in_today,
			'out_today' => $out_today,
			'solde_commande' => $solde_commande,
			'solde_client' => $solde_client,
			'dette' => $dette_clients,
		));
		
	}
}
